"""
相关配置信息
1.数据库配置
    目的: 为了在项目中用来存储新闻数据以及用户数据
2.redis配置
    目的: 缓存访问频率高的内容,存储session信息,图片验证码,短信验证码
3.session配置
    目的: 将来用来保存用    dict_data = request.json
户的登录信息
4.csrf配置
    目的: 保护app,防止csrf攻击
"""

from random import randint
from info import create_app,db,models  # 导入models,让整个程序知道遮盖文件的banzai
from flask_script import Manager
from flask_migrate import Migrate,MigrateCommand
from flask import current_app
from datetime import datetime,timedelta

# 调用方法,获取app
from info.models import User

app = create_app("develop")

# 创建manager对象,管理app
manager = Manager(app)

# 使用Migrate关联app和db
Migrate(app,db)

# 给manager
manager.add_command('db',MigrateCommand)

# 定义方法,创建管理员对象
# @manager.option 给 manager添加一个脚本运行的方法
# 参数1：在调用方法的时候传递的参数名称；
# 参数2：是对参数1的解释p
# 参数3：目标参数，用来传递给形式参数用的
@manager.option('-u', '--username', dest='username')
@manager.option('-p', '--password', dest='password')
def create_superuser(username,password):

    # 1.创建用户对象
    admin = User()

    # 2.设置用户属性
    admin.nick_name = username
    admin.mobile = username
    admin.password = password
    admin.is_admin = True

    # 3.保存数据到数据库
    try:
        db.session.add(admin)
        db.session.commit()
    except Exception as e:
        current_app.logger.error(e)
        return "创建失败"

    return "创建成功"


#为了图表好看,添加测试用户
@manager.option('-t', '--test', dest='test')
def add_test_user(test):

    #1.定义容器
    user_list = []

    #2.for循环创建1000个用户
    for i in range(0,1000):
        user = User()
        user.nick_name = "老王%s"%i
        user.mobile = "138%08d"%i
        user.password_hash = "pbkdf2:sha256:50000$aKqdryiI$c7a6e0e7f550cf8710def5eafda02fd36547d938bad71b8a40466830764aec6e"
        #设置用户的登陆时间为近31天的
        user.last_login = datetime.now() - timedelta(seconds=randint(0, 3600 * 24 * 31))

        user_list.append(user)

    #3.将用户添加到数据库中
    try:
        db.session.add_all(user_list)
        db.session.commit()
    except Exception as e:
        current_app.logger.error(e)
        return "添加测试用户失败"

    return "添加测试用户成功"

if __name__ == "__main__":
    manager.run()
